package cn.lyjuan.jenkins.plugin.qcloud.util;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;

import java.io.File;

/**
 * 腾讯云 cos工具类
 * https://cloud.tencent.com/document/product/436/35215
 */
public class CosUtil {

//    public static String uploadFileWithRandomName(String secretId, String secretKey, String region, String bucket, File file, String prefixPath) {
//        // 随机路径
//        if (StringUtils.isNull(prefixPath)) {
//            prefixPath = DateUtils.format(LocalDateTime.now(), "yyyy/MM/dd/HH/");
//        } else if (!prefixPath.endsWith("/"))// 补上结尾的 /
//            prefixPath += "/";
//        String fileName = "";
//        if (isChangeRandomName) {// 随机文件名
//            //获取最后一个.的位置
//            int lastIndexOf = file.getName().lastIndexOf(".");
//            //获取文件的后缀名，如：.jpg
//            String suffix = lastIndexOf > -1 ? file.getName().substring(lastIndexOf) : "";
//            fileName = RandomUtils.uuid() + suffix;
//        } else {// 自带文件名
//            fileName = file.getName();
//        }
//        // 处理文件路径
//        if (!prefixPath.startsWith("/"))
//            prefixPath = "/" + prefixPath;
//        fileName = prefixPath + fileName;
//    }

    /**
     * 上传文件 使用密钥上传
     *
     * @param file     上传的本地文件
     * @param fileName 存储文件名
     * @return 成功返回文件路径, 失败返回null
     */
    public static String uploadFile(String secretId, String secretKey, String region, String bucket, File file, String fileName) {


        // 1 初始化用户身份信息(secretId, secretKey)
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 区域
        ClientConfig clientConfig = new ClientConfig(new com.qcloud.cos.region.Region(region));
        // 3 生成 cos 客户端
        COSClient cosclient = new COSClient(cred, clientConfig);

        // 上传 object, 建议 20M 以下的文件使用该接口
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, file);

        // 设置 x-cos-security-token header 字段
        ObjectMetadata objectMetadata = new ObjectMetadata();
        putObjectRequest.setMetadata(objectMetadata);
        try {
            PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
            // 成功：putobjectResult 会返回文件的 etag
            String etag = putObjectResult.getETag();
            System.out.println("etag: " + etag);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭客户端
            cosclient.shutdown();
            return fileName;
        }
    }
}